/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package src.model;

/**
 *
 * @author camila
 */

import src.dto.SolicitanteDTO;
import java.util.Collection;
import java.util.ArrayList;
import java.sql.*;

public class solicitanteDAO {

    //Declaração de variáveis
    private static Conexao conexao = null;
    private static Statement stmt = null;

    Collection<SolicitanteDTO> retorno = new ArrayList<SolicitanteDTO>();
    SolicitanteDTO solicitante;

    private String sql;

    //Método construtor do UsuárioDAO.
    public solicitanteDAO(){
        conexao= Conexao.getConexao();
    }

    //Método para listar todos os solicitante com base no usuário logado.
    public Collection<SolicitanteDTO> listaSolicitante (int ident){
        sql = "SELECT id_solicitante, nome FROM Solicitante WHERE id_usuario = " + ident +" ORDER BY nome";
        return listar(sql);
    }

    //Método para listar o id do solicitante
    public Collection<SolicitanteDTO> buscarId(String solicitante){
        sql = "SELECT * FROM solicitante WHERE nome = '" + solicitante + "'";
        return listar(sql);
    }
  
    public boolean cadastrarSolicitante(SolicitanteDTO dados){
        // Sql de para modificar dados do usuário
        sql = "INSERT INTO solicitante (nome, id_usuario) VALUES ('" + dados.getNome() + "'," + dados.getIdUsuario() +")";
        //Executa SQL
        return modificar(sql);
    }

    //Método para genérico para listar solicitante
    private Collection<SolicitanteDTO> listar (String sql){
        try{
            this.stmt = this.conexao.con.createStatement();
            ResultSet rs = this.stmt.executeQuery(sql);
            while (rs.next()){
                solicitante = new SolicitanteDTO();
                solicitante.setId_solicitante(rs.getInt("id_solicitante"));
                solicitante.setNome(rs.getString("nome"));
                retorno.add(solicitante);
            }
        }catch(SQLException se){
            printSQLException(se);
        }
        return retorno;
    }

    //Método para inserir, excluir e atualizar.
    private boolean modificar(String sql){
        try{
            PreparedStatement stmt = this.conexao.con.prepareStatement(sql);
            stmt.executeUpdate();
            return true;
        }catch(SQLException se){
            printSQLException(se);
            return false;
        }
    }

    //Método que imprimi a exceção do SQL
    private static void printSQLException(SQLException se){
        while(se != null){
            System.out.print("SQLException: State: " + se.getSQLState());
            System.out.print("Severety: " + se.getErrorCode());
            System.out.print(se.getMessage());
            se = se.getNextException();
        }
    }
}
